logo头像

不忘初心 方得始终

Ubuntu16.04 caffe配置 matlab接口

本篇为在上一篇Ubuntu16.04配置好caffe GPU版的基础上,编译caffe的matlab接口介绍

编译caffe的matlab接口

(1)修改caffe-master/Makefile.config
  这一步主要是在Caffe的编译配置文件Makefile.config中加入Matlab的路径。注意路径文件夹是要包含Matlab安装目录的“bin”文件夹的。


(2)编译接口。这里默认已经编译好了Caffe源码主体部分。所以直接编译接口。在caffe-master目录下打开终端,输入: make matcaffe 至于如何编译Caffe源码的主体部分请大家百度,就是make all ,make test那些。我是一开始没有在Makefile.config中加入Matlab路径,所以编译Caffe主体代码时不会编译Matlab接口。
(3)测试接口。输入 make mattest
  这里可能报错:caffe_.mexa64: undefined symbol: _ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE


PS:只替换库libstdc++.so.6是不行的,要解决此问题需要多替换几个库。输入终端命令:

1 export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6
2 export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/

注意:目录/usr/lib/x86_64-linux-gnu/是我的系统库目录。大家可以通过查询库所在位置来确定自己的系统库目录:
sudo find / -name libstdc++.so.6
重新运行make mattest , 问题解决~

下面是我另外碰到的一些问题:
① MEX-file ‘/home/zhangjiqing/caffe/matlab/+caffe/private/caffe_.meax64’无效:/home/zhangjiqing/caffe/matlab/+caffe/private/caffe_.mexa64:undefined symbol:_ZN2cv8imencodeERKNSt7_cxx1112basic_stringSt11char_traitslcESalcEEERKNS_1alhEERKSB_liSaliEE
解决方法如下:

②运行make mattest时可能会碰到下面这个错误:
MEX-file ‘/home/a204/caffe/matlab/+caffe/private/caffe_.meax64’无效:/usr/local/MATLAB/R2015b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:version GLIBCXX_3.4.20not found(required by /home/a204/caffe/matlab/+caffe/private/caffe_.mexa64)解决方式是将matlab的libstdc++.so.6链接到系统的库文件。

sudo rm /usr/local/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6

这样可以解决,不过主要在使用rm命令式需要谨慎,先备份。

(4)在Matlab中试试接口

<1>下载bvlc_reference_caffenet.caffemodel
链接:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel

下载好之后放入文件夹/caffe-master/models/bvlc_reference_caffenet 这是因为一会运行的demo要使用这个模型。

<2>在终端输入命令“matlab”(打不开的自己去添加PATH)打开Matlab,切换到目录/caffe-master/matlab/demo/(这很重要)

<3>输入命令 run(‘classification_demo.m’) 或者双击打开classification_demo.m直接点击上面控制台上的“运行”即可,不需要输入参数。

<4>输出是一个1000×1的矩阵,因为ImageNet数据集有1000个类别。


到此OK,大家加油~